home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / programming / other / jikes / src / zip.h < prev   
C/C++ Source or Header  |  1999-05-14  |  2KB  |  92 lines

  1. // $Id: zip.h,v 1.3 1999/01/25 20:00:32 shields Exp $
  2. //
  3. // This software is subject to the terms of the IBM Jikes Compiler
  4. // License Agreement available at the following URL:
  5. // http://www.ibm.com/research/jikes.
  6. // Copyright (C) 1996, 1998, International Business Machines Corporation
  7. // and others.  All Rights Reserved.
  8. // You must accept the terms of that agreement to use this software.
  9. //
  10. #ifndef zip_INCLUDED
  11. #define zip_INCLUDED
  12.  
  13. #ifdef WIN32_FILE_SYSTEM
  14. #include <windows.h>
  15. #endif
  16.  
  17. #include "config.h"
  18. #include <stddef.h>
  19. #include <stdio.h>
  20. #include "tuple.h"
  21. #include "bool.h"
  22. #include "unzip.h"
  23.  
  24. class Control;
  25. class Zip;
  26. class DirectorySymbol;
  27. class FileSymbol;
  28.  
  29. class ZipFile : public Unzip
  30. {
  31. public:
  32.  
  33.     ZipFile(FileSymbol *);
  34.     ~ZipFile();
  35.  
  36. private:
  37.     char *buffer;
  38.  
  39.     u1 GetU1();
  40.     u2 GetU2();
  41.     u4 GetU4();
  42.     void Skip(u4 length);
  43.  
  44. #if defined(UNIX_FILE_SYSTEM) || defined(AMIGAOS_FILE_SYSTEM)
  45.         FILE *zipfile;
  46.         static int (*uncompress_file[10]) (FILE *, char *, long);
  47.     public:
  48.         inline char *Buffer() { return buffer; }
  49. #elif defined(WIN32_FILE_SYSTEM)
  50.         char *file_buffer;
  51.         static int (*uncompress_file[10]) (char *, char *, long);
  52.     public:
  53.         inline char *Buffer() { return (buffer ? buffer : file_buffer); }
  54. #endif
  55. };
  56.  
  57. class Zip
  58. {
  59. public:
  60.     Control &control;
  61.  
  62.     Zip(Control &, char *);
  63.     ~Zip();
  64.  
  65.     void ReadDirectory(DirectorySymbol *);
  66.  
  67.     bool IsValid() { return magic == 0x06054b50; }
  68.  
  69. private:
  70.     friend class ZipFile;
  71.  
  72.     u4 magic;
  73.     char *zipbuffer,
  74.          *buffer_ptr;
  75.  
  76.     u1 GetU1();
  77.     u2 GetU2();
  78.     u4 GetU4();
  79.     void Skip(u4 length);
  80.  
  81.     NameSymbol *ProcessFilename(char *, int);
  82.     DirectorySymbol *ProcessSubdirectoryEntries(DirectorySymbol *, char *, int);
  83.     void ProcessDirectoryEntry(DirectorySymbol *);
  84.  
  85. #if defined(UNIX_FILE_SYSTEM) || defined(AMIGAOS_FILE_SYSTEM)
  86.     FILE *zipfile;
  87. #elif defined(WIN32_FILE_SYSTEM)
  88.     HANDLE zipfile, mapfile;
  89. #endif
  90. };
  91. #endif /* zip_INCLUDED */
  92.